drivers/passthrough: fix error paths in pci_add_device*()
authorTim Deegan <Tim.Deegan@citrix.com>
Mon, 23 May 2011 17:35:32 +0000 (18:35 +0100)
committerTim Deegan <Tim.Deegan@citrix.com>
Mon, 23 May 2011 17:35:32 +0000 (18:35 +0100)
When a device can't be allocated to dom0 by the IOMMU, don't leave
dom0 in the "domain" field.  It causes pci_remove_device()
to crash trying to remove the dev from the domain's list of devices
(and was probably the wrong thing to do anyway).

Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
xen/drivers/passthrough/pci.c

index e30cd950a399749febd91d56c025338859ae6aa2..d3f5e8fda88bdb2931cc29a969eb4fce0ad8fa76 100644 (file)
@@ -158,7 +158,10 @@ int pci_add_device(u8 bus, u8 devfn)
         pdev->domain = dom0;
         ret = iommu_add_device(pdev);
         if ( ret )
+        {
+            pdev->domain = NULL;
             goto out;
+        }
 
         list_add(&pdev->domain_list, &dom0->arch.pdev_list);
         pci_enable_acs(pdev);
@@ -222,7 +225,10 @@ int pci_add_device_ext(u8 bus, u8 devfn, struct pci_dev_info *info)
         pdev->domain = dom0;
         ret = iommu_add_device(pdev);
         if ( ret )
+        {
+            pdev->domain = NULL;
             goto out;
+        }
 
         list_add(&pdev->domain_list, &dom0->arch.pdev_list);
         pci_enable_acs(pdev);